package com.cd.music.utils;

import com.alibaba.fastjson.JSON;
import com.cd.music.dto.ResultBean;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yxl 余秀良
 * @version 1.0
 * @description: 统一返回格式
 * @date 2018年01月21日  上午10:39
 * @address: 四川成都
 */
public final class ResultUtil {
    /**
     * @param resultBean 需要返回的参数
     * @author yxl 余秀良
     * @version 1.0
     * @description: 成功返回的结果
     * @date 2018年01月21日 上午11:07
     * @address: 四川成都
     */
    public static String result(ResultBean resultBean) {
        if (resultBean != null) {
            return resultTemplate(resultBean.getData(), resultBean.getIsSuccess(), resultBean.getMessage(), resultBean.getCode());
        } else {
            return resultTemplate(null, false, "", 200);
        }
    }

    /**
     * @param data 需要返回的参数
     * @author yxl 余秀良
     * @version 1.0
     * @description: 成功返回的结果
     * @date 2018年01月21日 上午11:07
     * @address: 四川成都
     */
    public static String success(Object data) {
        return resultTemplate(data, true, "请求成功", 200);
    }

    /**
     * @param data    　返回的数据
     * @param message 返回的提示信息
     * @author yxl 余秀良
     * @version 1.0
     * @description: 成功返回的结果
     * @date 2018年01月21日 上午11:08
     * @address: 四川成都
     */
    public static String success(Object data, String message) {
        return resultTemplate(data, true, message, 200);
    }

    /**
     * @param code    错误码
     * @param message 提示信息
     * @author yxl 余秀良
     * @version 1.0
     * @description: 错误返回的结果
     * @date 2018年01月21日 上午11:10
     * @address: 四川成都
     */
    public static String error(int code, String message) {
        return resultTemplate(null, false, message, code);
    }

    /**
     * @param code 错误码
     * @author yxl 余秀良
     * @version 1.0
     * @description: 错误返回的结果
     * @date 2018年01月21日 上午11:10
     * @address: 四川成都
     */
    public static String error(int code) {
        return resultTemplate(null, false, "请求失败", code);
    }

    /**
     * @param code    状态码
     * @param message 提示消息
     * @param result  返回数据
     * @author yxl 余秀良
     * @version 1.0
     * @description: 通用返回格式模板
     * @date 2018年01月21日 上午11:14
     * @address: 四川成都
     */
    private static String resultTemplate(Object result, boolean success, String message, int code) {
        Map<String, Object> resultMap = new HashMap<>(16);
        Map<String, Object> dataMap = new HashMap<>(16);
        dataMap.put("data", result);
        dataMap.put("success", success);
        dataMap.put("message", message);
        dataMap.put("code", code);
        resultMap.put("response", dataMap);
        return JSON.toJSONString(resultMap);
    }

    private ResultUtil() {
        throw new UnsupportedOperationException("这是一个工具类不能实例化");
    }
}
